<?php
class pagination
{
	public function __construct()
	{
	}
	public function calculate_pages($total_rows, $rows_per_page, $page_num)
	{
		require_once PATH_LANGUAGES.'vi'.DS.'pagination'.LANG.SUFFIX;
		$arr = array();
		// calculate last page
		$last_page = ceil($total_rows / $rows_per_page);
		// make sure we are within limits
		$page_num = (int) $page_num;
		if ($page_num < 1)
		{
			$page_num = 1;
		}
		elseif ($page_num > $last_page)
		{
			$page_num = $last_page;
		}
		$upto = ($page_num - 1) * $rows_per_page;
		$arr['offset'] = ($upto >= 0) ? $upto : 0;
		$arr['path'] = $this->rm_url_param('page');
		$arr['current'] = $page_num;
		if ($page_num == 1)
		$arr['previous'] = $page_num;
		else
		$arr['previous'] = $page_num - 1;
		if ($page_num == $last_page)
		$arr['next'] = $last_page;
		else
		$arr['next'] = $page_num + 1;
		$arr['last'] = $last_page;
		$arr['info'] = strtr($lang['total_rows'], array('[PAGE]' => $page_num, '[TOTAL]' => $last_page));
		$arr['pages'] = $this->get_surrounding_pages($page_num, $last_page, $arr['next']);
		return $arr;
	}
	function get_surrounding_pages($page_num, $last_page, $next)
	{
		$arr = array();
		$show = 5; // how many boxes
		// at first
		if ($page_num == 1)
		{
			// case of 1 page only
			if ($next == $page_num) return array(1);
			for ($i = 0; $i < $show; $i++)
			{
				if ($i == $last_page) break;
				array_push($arr, $i + 1);
			}
			return $arr;
		}
		// at last
		if ($page_num == $last_page)
		{
			$start = $last_page - $show;
			if ($start < 1) $start = 0;
			for ($i = $start; $i < $last_page; $i++)
			{
				array_push($arr, $i + 1);
			}
			return $arr;
		}
		// at middle
		$start = $page_num - $show;
		if ($start < 1) $start = 0;
		for ($i = $start; $i < $page_num; $i++)
		{
			array_push($arr, $i + 1);
		}
		for ($i = ($page_num + 1); $i < ($page_num + $show); $i++)
		{
			if ($i == ($last_page + 1)) break;
			array_push($arr, $i);
		}
		return $arr;
	}

	function rm_url_param($param_rm, $query='')
	{
		empty($query)? $query = '?'.QUERY_STRING : '';
		parse_str($query, $params);
		unset($params[$param_rm]);
		$newquery = '';
		foreach($params as $k => $v)
		{ $newquery .= '&'.$k.'='.$v; }
		return substr($newquery,1);
	}
}
?>